/**
 * Created by zyh on 2019/9/29.
 */

/**
 * 校验0-10正数就返回true
 **/
const isIntNum = (val) => {
  var reg = /^([0-9]|10)$/;
  var boolean = false;
  if (reg.test(val)) {
    boolean = true;
  }
  return boolean;
};

class Game {
  constructor() {
    this.scoreArr = []; // 所有得分
    this.score = 0; // 总分
    this.sessionArr = []; // 一局的得分
    this.session = 0; // 第几局
    this.dataAllArr = []; // 每局的总分
  }

  /**
   * 在选手扔球后会调用,参数表示击中球瓶个数
   * @param pins
   */
  roll(pins = 0) {
    if (!isIntNum(pins)) {
      console.log('分值：' + pins + ' 异常数据');
      return false;
    }
    if (this.session < 9) {
      if (this.sessionArr.length == 0 && pins == 10) { // 第1次 = 10
        this.sessionArr.push(pins);
        this.scoreArr.push(this.sessionArr);
        this.sessionArr = [];
        this.session++;
      } else if (pins != 10 && this.sessionArr.length == 0) { // 第1次 != 10
        this.sessionArr.push(pins);
        this.scoreArr.push(this.sessionArr);
      } else if (this.sessionArr.length == 1) { // 第2次
        this.sessionArr.push(pins);
        this.scoreArr[this.scoreArr.length - 1] = this.sessionArr;
        this.sessionArr = [];
        this.session++;
      }
    } else if (this.session == 9) {
      if (this.sessionArr.length == 0) { // 第1次
        this.sessionArr.push(pins);
        this.scoreArr.push(this.sessionArr);
      } else if (this.sessionArr.length == 1) { // 第2次
        this.sessionArr.push(pins);
        if ((this.sessionArr[0] + this.sessionArr[1]) < 10) {// 结束
          this.scoreArr[this.scoreArr.length - 1] = this.sessionArr;
          this.sessionArr = [];
          this.session++;
        }
      } else { // 第3次
        this.sessionArr.push(pins);
        this.scoreArr[this.scoreArr.length - 1] = this.sessionArr;
        this.sessionArr = [];
        this.session++;
      }
    } else {
      console.log('分值：' + pins + ' 记分结束,请重新开始记分');
    }
    this.score = this.Score(this.scoreArr); // 计算总分
  }

  /**
   * 计算总分
   * @returns {number}
   */
  Score(arr) {
    this.dataAllArr = []; // 每局的总分
    let allScore = 0;
    for (var k = 0; k < arr.length; k++) {
      let score_ar = 0;
      let ar = arr[k];
      for (var i in ar) {
        score_ar += ar[i];
      }
      if (k < 9) { // 前9局
        if (ar.length == 2 && score_ar == 10) {// spare 取后一次的分值
          if (arr[k + 1] && arr[k + 1].length > 0) {
            score_ar += arr[k + 1][0];
          }
        } else if (ar.length == 1 && score_ar == 10) {// strike 取后两次的分值
          if (arr[k + 1] && arr[k + 1].length == 1) {
            score_ar += arr[k + 1][0];
            if (arr[k + 2] && arr[k + 2].length > 0) {
              score_ar += arr[k + 2][0];
            }
          } else if (arr[k + 1] && arr[k + 1].length >= 2) {
            score_ar += arr[k + 1][0];
            score_ar += arr[k + 1][1];
          }
        }
      }
      var history = this.dataAllArr.length > 0 ? this.dataAllArr[this.dataAllArr.length - 1] : 0;
      this.dataAllArr.push(history + score_ar);

      allScore += score_ar;
    }
    return allScore;
  }

  /**
   * 当前实时总分
   * @returns {number}
   */
  getScore() {
    return this.score;
  }

  /**
   * 每局的总分
   * @returns {Array}
   */
  getDataAllArr() {
    return this.dataAllArr;
  }
}
export default Game